import {defineStore} from 'pinia' //引入pinia
import axios from 'axios'
import {Document, Paragraph} from 'docx'

//这里官网是单独导出  是可以写成默认导出的  官方的解释为大家一起约定仓库用use打头的单词 固定统一小仓库的名字不易混乱
export const useStoreDown = defineStore("Down", {
  state: () => {
    return ({
      type: 1,
      bvid: 'BV1QL411673n',//就是bv号  也是aid   也是avid    就是视频地址后面的编码
      cid: '', //可以通过bvid获取  就是一组视频里面的每一集的编号
      downurl: "https://www.bilibili.com/video/BV1vk4y1p7C3?p=1&vd_source=4307a5f2a8e5fed14f2fd8b4d4c9e149",
      plist: [],
      percent: 0,
    })
  },
  actions: {
    async getDown(cid, name) {
      let res = await $tools.getVedioUrl(this.bvid, cid);

      console.log(name);
      console.log(res.data.durl[0].url);
      let url = res.data.durl[0].url;

      axios.get(url, {
        params: {},
        responseType: 'blob', // 切记类型 blob
        // onDownloadProgress 配置该属性代表允许为下载处理进度事件
        onDownloadProgress: (progressEvent) => {//axios封装的原生获取下载进度的事件，该回调参数progressEvent中包含下载文件的总进度以及当前进度
          console.log(progressEvent);
          if (progressEvent.lengthComputable) {
            //属性lengthComputable主要表明总共需要完成的工作量和已经完成的工作是否可以被测量
            //如果lengthComputable为false，就获取不到progressEvent.total和progressEvent.loaded
            this.percent = (progressEvent.loaded / progressEvent.total * 100).toFixed(2) //实时获取最新下载进度
          }
        }
      }).then((res) => {
        console.log(res);
        let blob = new Blob([res.data]);
        let url = window.URL.createObjectURL(blob); // 创建 url 并指向 blob
        let a = document.createElement('a');
        a.href = url;
        a.download = name + '.mp4';
        a.click();
        window.URL.revokeObjectURL(url); // 释放该 url
      }).catch((err) => {
        console.log(err);
      });

      // var a = document.createElement('a') // 创建一个<a></a>标签
      // a.href = url         //重点（如测试发现下载文件不存在/找不到，检查路径）
      // a.download = name+'.mp4'         // 设置下载文件文件名
      // a.style.display = 'none'           // 隐藏a标签
      // document.body.appendChild(a)       // 将a标签追加到文档对象中
      // a.click()                          // 模拟点击了a标签，会触发a标签的href的读取，浏览器就会自动下载了
      // a.remove()                         // 一次性的，用完就删除a标签
    },
    async getPlist() {
      let res = await $tools.getPlist(this.bvid);
      this.plist = res.data;
      console.log(res.data);
    }
  },
})
